import { getToken, removeToken, setToken } from '@/utils/auth'
import { getProfile, login } from '@/api/user'
import { constantRoutes } from '@/router'

export default {
  namespaced: true, // 开启子模块的命名空间
  state: {
    // ?? 空值合并
    // 表达式 ?? ''
    // 当左边的表达式仅为：null 或者是 undefined 的时候，才返回右边的值
    token: getToken(),
    userData: {},
    routes: constantRoutes

  },
  mutations: {
    setToken(state, token) {
      // 更新状态
      state.token = token
      // 同步缓存
      setToken(token)
    },
    removeToken(state) {
      state.token = null

      // 快捷键：ctrl + i，可以借助工具提示导入
      removeToken()
    },
    // 用户信息修改
    setUser(state, val) {
      state.userData = val
    },
    setRoutes(state, newRoutes) {
      // 需要干的事情：原先的静态路由和动态路由进行合并
      state.routes = [...constantRoutes, ...newRoutes]
    }
  },
  actions: {
    async userLogin({ commit }, data) {
      try {
        const token = await login(data)
        commit('setToken', token)
      } catch (error) {
        console.log('error', error)
      }
    }, // 获取用户信息
    async getUser({ commit }) {
      try {
        const data = await getProfile()

        commit('setUser', data)
        // 返回用户权限信息
        return data.roles.menus
      } catch (error) {
        console.log(error)
      }
    },
    // 退出登录
    logout({ commit }) {
      commit('removeToken')
      commit('setUser', {})
    }
  }

}
